Kubernetes 中最常使用的工作單位就是 Deployment,而 Deployment 採用的更新策略是 RollingUpdate,意味者當更新發生時,會先產生出 n 個新版本的 Pod,並且透過 Readiness 去確認該 Pod 目前可視為正常工作後,就會移除先前版本的 n 個 Pod。
因此本文想要探討的是,如果你想要使用不同的更新策略,你可以怎麼做?
該文章的架構是基於 Argo RollOuts 這個工具來如何達到金絲雀部署與藍綠部署
1. Argo RollOut 的安裝非常簡單,主要操作都是透過 CRD 來完成
2. 對於已經現存的 Deployment 物件,可以非常輕鬆的轉換到 Argo RollOut 的 CRD
#金絲雀部署
金絲雀部署的狀況下,我們會希望能夠把部分的流量先行導入到新的應用程式,接者逐漸調高比例直到最後全面切換過去。這部分可以想像成類似下列的步驟
假設本來有10個舊有應用程式 v1, 現在要升級成 v2.
1. 先部署兩個新版本的應用程式,直到 Readiness 完成後,移除舊有的兩個應用程式
2. 部署人員確認目前狀況良好,決定繼續往下推動,再次部署兩個新的
3. 部署人員再次確認,依序往下部署新的應用程式直到十個都全面替換完成
而上述的過程再 Argo RollOut 會依賴兩個部分完成
1. Yaml 中定義這些步驟
2. 透過 kubectl argo (Plugin) 的方式告訴 Controller 請繼續往下
譬如下列檔案定義步驟
```
strategy:
canary:
steps:
- setWeight: 20
- pause: {}
- setWeight: 40
- pause: {duration: 10}
- setWeight: 60
- pause: {duration: 10}
- setWeight: 80
- pause: {duration: 10}
```
維運人員透過指令要求繼續往下執行
文章後續還有探討如何用 Argo RollOut 來完成藍綠部署,同時部署兩個完整群體,並且透過切換 Service 來指向不同版本的群體
對於想要嘗試不同更新策略的玩家,可以詳細閱讀本文並且玩轉看看 Argo RollOut。
https://medium.com/@ptran32/control-your-kubernetes-deployment-with-argo-rollouts-adb54c4e9b7d